package com.itheima.d4_synchronized_code;

/*
    账户类

    同步代码块
        作用：把访问共享资源的核心代码给上锁，以此保证线程安全。
        synchronized(同步锁) {
            访问共享资源的核心代码
        }
        原理：每次只允许一个线程加锁后进入，执行完毕后自动解锁，其他线程才可以进来执行。

        同步锁的注意事项
            对于当前同时执行的线程来说，同步锁必须是同一把（同一个对象），否则会出bug。
 */
public class Account {
    private String cardId; // 卡号
    private double money; // 余额。

    public Account() {
    }

    public Account(String cardId, double money) {
        this.cardId = cardId;
        this.money = money;
    }

    // 小明 小红同时过来的
    public void drawMoney(double money) throws InterruptedException {
        String name = Thread.currentThread().getName();
        if (this.money >= money) {
            Thread.sleep(19);
            this.money -= money;
            System.out.println(name + "来取钱" + money + "成功!");
            System.out.println(name + "取钱后,账户剩余" + this.money);
        } else {
            System.out.println(name + "来取钱,余额不足!");
        }
    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }


}
